﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;

namespace FNN.Helpers.IO
{
    public class CsvHelper
    {
        private string _targetFile;

        /// <summary>
        ///     Имя целевого файла
        /// </summary>
        public string TargetFile
        {
            get { return _targetFile; }
            set { _targetFile = value; }
        }

        public CsvHelper(string fileName)
        {
            _targetFile = fileName;
        }

        /// <summary>
        ///     Получить заголовки столбцов
        /// </summary>
        /// <returns>Лист заголовков</returns>
        public IEnumerable<string> GetHeader()
        {
            if (!File.Exists(_targetFile)) return null;
            var fileRows = File.ReadAllLines(_targetFile);
            var result = fileRows[0].Split(';').ToList();
            return result;
        }

        /// <summary>
        ///     Получить все содержимое
        /// </summary>
        /// <returns>Массив содержимого</returns>
        public IEnumerable<string[]> GetAllContent()
        {
            if (!File.Exists(_targetFile)) return null;
            var fileRows = File.ReadAllLines(_targetFile);
            return fileRows.Select(fileRow => fileRow.Split(';')).ToList();
        }

        /// <summary>
        ///     Получить содержимое без заголовков
        /// </summary>
        /// <returns>Массив содержимого</returns>
        public IEnumerable<string[]> GetBody()
        {
            if (!File.Exists(_targetFile)) return null;
            var fileRows = File.ReadAllLines(_targetFile);
            return fileRows.Where(fileRow => fileRow != fileRows.ElementAt(0)).Select(fileRow => fileRow.Split(';')).ToList();
        }

        /// <summary>
        ///     Получить длину файла
        /// </summary>
        /// <returns>Длина файла</returns>
        public int GetFileLengh()
        {
            if (!File.Exists(_targetFile)) return 0;
            var fileRows = File.ReadAllLines(_targetFile);
            return fileRows.Length;
        }

        /// <summary>
        ///     Получить массив контрольных значений
        /// </summary>
        /// <param name="pathToData">Путь к файлу</param>
        /// <returns>Массив контрольных значений</returns>
        public IEnumerable<int> GetControlValues(string pathToData)
        {
            using (var reader = new StreamReader("@" + pathToData))
            {
                var result = new List<int>();
                string line;
                while ((line = reader.ReadLine()) != null)
                {
                    result.Add(Convert.ToInt32(line));
                }
                return result;
            }
        }
    }
}
